<?php
/**
 * 用于检测业务代码死循环或者长时间阻塞等问题
 * 如果发现业务卡死，可以将下面declare打开（去掉//注释），并执行php start.php reload
 * 然后观察一段时间workerman.log看是否有process_timeout异常
 */

//declare(ticks=1);
use GatewayWorker\Lib\Gateway;

class Events
{

    /**
     * 新建一个类的静态成员，用来保存数据库实例
     */
    public static $db = null;

    /**
     * 进程启动后初始化数据库连接
     */
    public static function onWorkerStart($worker)
    {

    }

    /**
     * 当客户端连接时触发
     * 如果业务不需此回调可以删除onConnect
     *
     * @param int $client_id 连接id
     */
    public static function onConnect($client_id)
    {
        $new_message = array(
            'type'   => 'content',
            'online' => Gateway::getAllClientCount(),//当前在线人数
            //'time'   => date('Y-m-d H:i:s'),
        );
        //给当前用户发送
        return Gateway::sendToCurrentClient(json_encode($new_message));
    }

    /**
     * 当客户端发来消息时触发
     *
     * @param int   $client_id 连接id
     * @param mixed $message   具体消息
     */
    public static function onMessage($client_id, $message)
    {
        $message_data = json_decode($message, true);
        if (!$message_data) {
            return;
        }

        // 根据类型执行不同的业务
        switch ($message_data['type']) {
            // 客户端回应服务端的心跳
            case 'pong':
                return;

            // 上传图片
            case 'add':
                $new_message = array(
                    'type'   => 'add',
                    'img'    => $message_data['img'],
                    'online' => Gateway::getAllClientCount(),//当前在线人数
                    //'time'   => date('Y-m-d H:i:s'),
                );
                return Gateway::sendToAll(json_encode($new_message));
        }
    }

}
